//
//  OSCObjsTableViewController.m
//  OSClient
//
//  Created by Chaosky on 15/10/20.
//  Copyright © 2015年 1000phone. All rights reserved.
//

#import "OSCObjsTableViewController.h"

// 所有数据模型的父类
#import "OSCBaseObject.h"


// 匿名类别
@interface OSCObjsTableViewController ()

@end

@implementation OSCObjsTableViewController


// 懒加载方式创建数据，之后只能通过self.xxxx来访问
- (NSMutableArray *)dataArray
{
    // 判断实例对象是否存在
    if (!_dataArray) {
        _dataArray = [[NSMutableArray alloc] init];
    }
    return _dataArray;
}

- (AFHTTPRequestOperationManager *)manger
{
    if (!_manger) {
        _manger = [AFHTTPRequestOperationManager OSCManager];
    }
    return _manger;
}


- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 添加下拉刷新
    MJRefreshNormalHeader * header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        // 请求第1页的数据
        _currentPage = 1;
        [self requestWithPage:_currentPage];
    }];
    self.tableView.header = header;
    header.lastUpdatedTimeLabel.hidden = YES;
    
    // 添加上拉刷新
    MJRefreshAutoNormalFooter * footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
        _currentPage++;
        [self requestWithPage:_currentPage];
    }];
    self.tableView.footer = footer;
    // 关闭下拉刷新的自动刷新功能
    footer.automaticallyRefresh = NO;
}

// 让子类实现该方法
- (NSArray *)pareseXMLDocument:(ONOXMLDocument *)document
{
    // 断言
    // C语言： assert(<#e#>)
    // 判断句，判断条件是否为真，如果为真，程序正常运行，如果为假，将导致程序崩溃(crash)。
    // if (condition){} else{}
    NSAssert(false, @"子类需要重载该方法");
    return nil;
}

// 让子类生成URL，父类请求数据
- (void)requestWithPage:(NSInteger) page
{
    // 请求数据，URL由子类生成
    [self.manger GET:self.genrateURL(page) parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
        // 判断当前请求的数据是否为第1页
        if (page == 1) {
            // 移除所有的数据
            [self.dataArray removeAllObjects];
        }
        // 解析XML数据，因为我们设置AFHTTPRequestOperationManager的responseSerializer = [AFOnoResponseSerializer XMLResponseSerializer];
        // responseObject返回的数据就是一个ONOXMLDocument对象
        NSArray * newslistElements = [self pareseXMLDocument:responseObject];
        NSLog(@"%ld",newslistElements.count);
        
        // 遍历数组
        for (ONOXMLElement * element in newslistElements) {
            
/*            // 根据一个类名获取对应类
            Class class = NSClassFromString(@"OSCBaseObject");
            OSCBaseObject * object = [[class alloc] initWithXMLElement:nil];
*/
            id object = [[self.objClass alloc] initWithXMLElement:element];
            [self.dataArray addObject:object];
        }
        // 重新加载数据
        [self.tableView reloadData];
        [self.tableView.header endRefreshing];
        [self.tableView.footer endRefreshing];
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
        // 如果是上拉刷新请求数据失败
        if (self.tableView.footer.state == MJRefreshStateRefreshing) {
            self.currentPage--;
            if (self.currentPage < 1) {
                self.currentPage = 1;
            }
            [self.tableView.footer endRefreshing];
        }
        [self.tableView.header endRefreshing];
    }];
}

#pragma mark - UITableViewDataSource
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return self.dataArray.count;
}


@end
